package educar.facultad;

import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.PreparedStatement;

import educar.login.Session;
import educar.principal.IController;
import educar.principal.IView;
import educar.db.*;

public class FacultadController{
	private static JPA jpa = new JPA();

	public static boolean existe (String codigo) {
		try {
			Facultad fac = getFacultad(codigo);
			return true;
		} catch (FacultadNoEncontrada ex) {
			return false;
		}
	}
	
	/**
	 * Actualiza los datos de un registro en la tabla.
	 * @param column
	 * @param value
	 * @param id
	 */
	public static void update(String column,String value, String id) {
		jpa.update("facultad", column, value,"codigo",id);
	}
	
	/**
	 * Este metodo nos permite agregar una facultad en la base de datos, es decir agregar un 
	 * nuevo registro en la tabla facultad.
	 * @param facultad
	 * @return
	 */	
	public static boolean save(Facultad facultad) {
		try {
			getFacultad(facultad.getCodigoFac());
			return false;
		} catch (FacultadNoEncontrada e1) {
			String[] columns = { "codigo", "nombre" };

			PreparedStatement stm = jpa.newRecord(DbConnection.bd+".facultad", columns);

			try {
				stm.setString(1, facultad.getCodigoFac());
				stm.setString(2, facultad.getNombreFac());
				
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			}

			jpa.create(stm);
			return true;
		}
	}
	
	/**
	 * Con este metodo se elimina un registro de la tabla facultad, que coincide
	 * con el codigo que se pasa como parametro.
	 * @param codigo
	 */
	public static void destroy(String codigo) {
		jpa.destroy("facultad", "codigo", codigo);
	}

	/**
	 * Retorna una instancia de la clase facultad obteniada de la base de datos.
	 * @param codigo
	 * @return
	 * @throws FacultadNoEncontrada
	 */
	public static Facultad getFacultad(String codigo) throws FacultadNoEncontrada {
		ResultSet rs = null;
		Facultad facultad = null;

		rs = jpa.getByField("facultad", "codigo", codigo);
		
		try {
			if (rs.next()) {
				facultad = new Facultad(rs.getString(1), rs.getString(2));
			} else {
				throw new FacultadNoEncontrada();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return facultad;
	}

}